#ifndef __GE_EFFECT_H__
#define __GE_EFFECT_H__
namespace Syp
{
///An Effect comprises of pass(es) which describe how something is to be rendered.
class SYPAPI Effect
{
public:	
	static Effect* createEffect(const String& effectName, const String& effectDescription, PInt effectQuality);
	
	///Adds a pass to the effect
	void addPass(const String& name);
	///Returns a pointer to the Pass at index p
	Pass* getPass(PInt p);
	///Returns the number of Passes in this Effect
	PInt getNumPasses();
	///Returns the name of the Effect.
	String& getName();
	///Returns the quality level of this effect.
	PInt getQuality();
	///Returns a const reference to the description string
	const String& getDescription();
	///Do not delete an Effect by yourself. Use the EffectRegistry to do so.
	virtual ~Effect(){};
protected:
	Effect(const String& effectName, const String& effectDescription, PInt effectQuality);
	

private:
	///The list of passes which make up this effect.
	std::vector<Pass*> passes;
	///Name of Pass
	String name;
	///Description of Pass/Notes for users/Things to take note of.
	String description;	
	///Quality level for this Effect. An Effect can have several variations defined, unqiue by the quality level. The Render system will dynamically attempt to use the highest quality pass usable on the available hardware. 
	PInt quality;

};
}
#endif //__GE_EFFECT_H__
